package framework.catalog;

import org.openqa.selenium.By;

import framework.elements.Button;
import framework.elements.Label;
import framework.tables.BaseTable;

/** Описывает справочник выбора ОКПО
 */
public class CatalogOkpoForm extends BaseCatalog{

	/** Базовый конструктор
	 */
	public CatalogOkpoForm() {
		super(By.xpath("//table[@id='resultTable']"), "Справочник ОКПО");
	}

	private BaseTable table = new BaseTable("popuptable", "/a", "/span[1]");
	private final Label firstRecordAvailable = new Label(By.xpath("//table[@id='resultTable']/tbody/tr[1]/td[1]/span[1]"), "Первая строка в таблице");
	private final Label firstRecordSelected = new Label(By.xpath("//table[@id='resultTable']/tbody/tr[1][contains(@style,'lightblue')]"), "Выбранная строка с ОКПО");
	private final Button choiceBtn = new Button(By.xpath("//input[@value='Выбрать']"), "Выбрать");
	// Колонки таблицы
	private final String columnOkatoCode = "Код по ОКАТО";
	private final String columnOktmoCode = "Код по ОКТМО";
	private final String columnOkfsCode = "Код по ОКФС";
	private final String columnOkopfCode = "Код по ОКОПФ";
	private final String columnOkpoCode = "Код по ОКПО";

	/** Выбирает первое значение из справочника, нажимает "Выбрать" и ждет закрытия окна справочника
	 * @param okatoCode должен быть объектом StringBuilder, для инициализации его внутри метода
	 * @param oktmoCode должен быть объектом StringBuilder, для инициализации его внутри метода
	 * @param okfsCode должен быть объектом StringBuilder, для инициализации его внутри метода
	 * @param okopfCode должен быть объектом StringBuilder, для инициализации его внутри метода
	 * @return выбранное значение кода ОКПО
	 */
	public String selectFirstOkpoAndCloseCatalog(StringBuilder okatoCode, StringBuilder oktmoCode, StringBuilder okfsCode, StringBuilder okopfCode){
		// Выбираем первую строку и ждем пока она не подсветится голубым цветом
		for(int i = 0; i < 2; i++){
			firstRecordAvailable.clickAndWait();
			if(firstRecordSelected.isPresent()){
				break;
			}
		}
		firstRecordSelected.waitAndAssertIsPresent();
		String text = firstRecordAvailable.getText();
		String firstColumnName = table.getColumnNameByIndex(1);
		// Если первая колонка не "Код по ОКПО", находим истинный код ОКПО
		if(!firstColumnName.equals(columnOkpoCode)){
			text = table.getText(columnOkpoCode, text, firstColumnName);
		}
		// Инициализируем остальные классфикационные признаки
		okatoCode.append(table.getText(columnOkatoCode, text, columnOkpoCode));
		oktmoCode.append(table.getText(columnOktmoCode, text, columnOkpoCode));
		okfsCode.append(table.getText(columnOkfsCode, text, columnOkpoCode));
		okopfCode.append(table.getText(columnOkopfCode, text, columnOkpoCode));
		choiceBtn.clickAndRepeatIfWndNotClosed(2);
		BaseTable.clearHashMap();
		logger.info("Выбранное значение кода ОКПО: " + text);
		return text;
	}
}
